/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * InterfaceUsuario.java
 *
 * Created on 23/06/2010, 19:42:14
 */
package gui;

import java.io.File;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import controller.BolaoFacade;
import controller.Sessao;


import util.Input;
import util.StatusJogo;
import bean.Grupo;
import bean.Jogador;
import bean.Jogo;
import bean.Palpite;
import bean.Rodada;
import exception.ExceptionGol;
import exception.ExceptionGrupo;
import exception.ExceptionNaturalidade;
import exception.ExceptionSenha;

/**
 * Interface Usuario
 * @author Claudio Cardoso, Daniel Leite, Lucas Sampaio, Matheus Sampaio
 * @version 1.0
 */
public class InterfaceUsuario extends javax.swing.JFrame {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2250095925376585001L;
	private BolaoFacade bolaoFacade = new BolaoFacade();
        private Jogador jogadorLogado  = Sessao.getInstance().getJogadorLogado();

    /** Creates new form InterfaceUsuario */
    public InterfaceUsuario() {
        initComponents();
        setLocationRelativeTo(null);
        nomeUsuario.setText(jogadorLogado.getNome());
        labelFoto.setText("");
        labelFoto.setIcon(new javax.swing.ImageIcon(jogadorLogado.getFoto()));
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        alteraCadastro = new javax.swing.JButton();
        darPalpites = new javax.swing.JButton();
        verResultados = new javax.swing.JButton();
        verPontuacao = new javax.swing.JButton();
        configuraGrupos = new javax.swing.JButton();
        pesquisaUsuarios = new javax.swing.JButton();
        deslogar = new javax.swing.JButton();
        labelFoto = new javax.swing.JLabel();
        labelNome = new javax.swing.JLabel();
        nomeUsuario = new javax.swing.JLabel();
        labelPontuacao = new javax.swing.JLabel();
        pontuacaoUsuario = new javax.swing.JLabel();
        botaoAlteraCadastro = new javax.swing.JButton();

        alteraCadastro.setText("Alterar Cadastro");
        alteraCadastro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                alteraCadastroActionPerformed(evt);
            }
        });

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Bolão da Copa P2 - Menu Usuário");
        setMinimumSize(new java.awt.Dimension(480, 295));
        addContainerListener(new java.awt.event.ContainerAdapter() {
            public void componentAdded(java.awt.event.ContainerEvent evt) {
                formComponentAdded(evt);
            }
        });

        darPalpites.setText("Dar Palpites");
        darPalpites.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                darPalpitesActionPerformed(evt);
            }
        });

        verResultados.setText("Ver Resultados");
        verResultados.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                verResultadosActionPerformed(evt);
            }
        });

        verPontuacao.setText("Ver Pontuação");
        verPontuacao.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                verPontuacaoActionPerformed(evt);
            }
        });

        configuraGrupos.setText("Configurações de Grupo");
        configuraGrupos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                configuraGruposActionPerformed(evt);
            }
        });

        pesquisaUsuarios.setText("Pesquisar Usuário");
        pesquisaUsuarios.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pesquisaUsuariosActionPerformed(evt);
            }
        });

        deslogar.setText("Deslogar");
        deslogar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deslogarActionPerformed(evt);
            }
        });

        labelFoto.setText("foto");
        labelFoto.setMaximumSize(new java.awt.Dimension(100, 100));
        labelFoto.setMinimumSize(new java.awt.Dimension(100, 100));

        labelNome.setText("Nome:");

        nomeUsuario.setText("usuario");

        labelPontuacao.setText("Pontuação:");

        pontuacaoUsuario.setText(Integer.toString(Sessao.getInstance().getJogadorLogado().calculaPontuacaoGeral()));

        botaoAlteraCadastro.setText("Alterar Cadastro");
        botaoAlteraCadastro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	alteraCadastroActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(botaoAlteraCadastro, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
                            .addComponent(pesquisaUsuarios, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE))
                        .addGap(106, 106, 106)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(deslogar, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(pontuacaoUsuario)))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(verPontuacao, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
                                .addComponent(verResultados, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
                                .addComponent(darPalpites, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE))
                            .addComponent(configuraGrupos, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 191, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(labelFoto, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(60, 60, 60))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(44, 44, 44)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(labelPontuacao)
                                    .addComponent(labelNome))
                                .addGap(29, 29, 29)
                                .addComponent(nomeUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addGap(26, 26, 26))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(darPalpites)
                        .addGap(18, 18, 18)
                        .addComponent(verResultados)
                        .addGap(18, 18, 18)
                        .addComponent(verPontuacao))
                    .addComponent(labelFoto, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(labelNome))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(6, 6, 6)
                        .addComponent(nomeUsuario))
                    .addComponent(configuraGrupos))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(pesquisaUsuarios))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(pontuacaoUsuario))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(labelPontuacao)))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(12, 12, 12)
                        .addComponent(deslogar, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(22, 22, 22)
                        .addComponent(botaoAlteraCadastro)))
                .addContainerGap(19, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formComponentAdded(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_formComponentAdded
        // TODO add your handling code here:
    }//GEN-LAST:event_formComponentAdded

    private void deslogarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deslogarActionPerformed
    	bolaoFacade.atualizaDados();
    	Sessao.getInstance().removeJogadorLogado();
        new InterfaceInicial().setVisible(true);
        dispose();
    }//GEN-LAST:event_deslogarActionPerformed

    private void configuraGruposActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configuraGruposActionPerformed
        new InterfaceUsuarioConfiguracoesGrupo().setVisible(true);
        dispose();
    }//GEN-LAST:event_configuraGruposActionPerformed

    private void darPalpitesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_darPalpitesActionPerformed
    	int indice;

		bolaoFacade.atualisaStatusDosJogos();

		if (Sessao.getInstance().getBolao().getRodadas().size() <= 0) {
			JOptionPane.showMessageDialog(this,"Nenhuma rodada cadastrada");
			return;
		}

		List<String> rodadas = new ArrayList<String>();
		
		for (Rodada rodada : Sessao.getInstance().getBolao().getRodadas()) {
			rodadas.add("Rodada " + rodada.getIdentificador());
		}
		
		String rodadaEscolha = (String) JOptionPane.showInputDialog(null, "Escolha a rodada:", "Dar Palpite", JOptionPane.PLAIN_MESSAGE,
	        	null, rodadas.toArray(), rodadas.toArray()[0]);

		if (rodadaEscolha == null)
			return;
		
		int identificador = Integer.parseInt(rodadaEscolha.split(" ")[1]);
		
		Rodada rodada = bolaoFacade.pesquisaRodada(identificador);

		if (rodada.getJogos().size() == 0) {
			JOptionPane.showMessageDialog(this, "Esta rodada nao tem jogo.");
			return;
		}
		
		List<String> jogos = new ArrayList<String>();
		
		indice = 0;
		int pontuacao = 0;
		for (Jogo jogo : rodada.getJogos()) {
			indice++;
			
			if (jogo.pesquisaPalpite(Sessao.getInstance().getJogadorLogado()) == null) {
				jogos.add(indice + " - " + jogo.jogoSemPalpite() + situacaoJogo(jogo));
			} else {
				Palpite palpite = jogo.pesquisaPalpite(Sessao.getInstance().getJogadorLogado());
				pontuacao = bolaoFacade.calculaPontuacao(palpite, jogo);
				jogos.add(indice + " - " + jogo.jogoComPalpite(pontuacao, Sessao.getInstance().getJogadorLogado()) + situacaoJogo(jogo));
			}
		}
		
		String escolheJogo = (String) JOptionPane.showInputDialog(null, "Escolha o jogo que deseja palpitar:", "Palpitar Jogo", JOptionPane.PLAIN_MESSAGE, 
    			null, jogos.toArray(), jogos.toArray()[0]);
		if (escolheJogo == null)
			return;
		
		int opcaoJogo = Integer.parseInt(escolheJogo.split(" ")[0]);
		
		Jogo jogo = rodada.getJogos().get(opcaoJogo - 1);

		if (jogo.getStatusDoJogo().equals(StatusJogo.FECHADO) || jogo.getStatusDoJogo().equals(StatusJogo.FECHADO_COM_RESULTADO)) {
			JOptionPane.showMessageDialog(this, "Voce nao pode mais da palpite para este jogo.", "Jogo Fechado", -1);
			return;
		}
		String golsTimeA, golsTimeB;
		try {
			golsTimeA = JOptionPane.showInputDialog("Gols do(a) " + jogo.getTimeA() + ": ");
			Input.checaGol(golsTimeA);
		
			golsTimeB = JOptionPane.showInputDialog("Gols do(a) " + jogo.getTimeB() + ": ");
			Input.checaGol(golsTimeB);
		} catch (ExceptionGol e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
			return;
		}
		
		if (jogo.pesquisaPalpite(jogadorLogado) != null) {
			try {
				Palpite palpite = jogo.pesquisaPalpite(jogadorLogado);
				palpite.setGolsTimeA(Integer.parseInt(golsTimeA));
				palpite.setGolsTimeB(Integer.parseInt(golsTimeB));
				JOptionPane.showMessageDialog(this, "Palpite alterado.");
				return;
			} catch (Exception e) {
				JOptionPane.showMessageDialog(this, "Erro ao alterar o palpite.");
				return;
			}
		} else {
			try {
				Palpite palpite = new Palpite(Integer.parseInt(golsTimeA), Integer.parseInt(golsTimeB), jogadorLogado);
				bolaoFacade.adicionaPalpite(palpite, jogo);
				JOptionPane.showMessageDialog(this, "Palpite criado.");
				return;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
    }//GEN-LAST:event_darPalpitesActionPerformed
    
    /**
	 * Retorna situacao do Jogo
	 * @param jogo
	 *       Jogo que deseja saber situacao
	 * @return 
	 * 		"Aberto", se o jogo esta aberto para apostas. "Fechado", caso  contrario
	 */
	public String situacaoJogo(Jogo jogo) {
		String situacao = "";
		if (jogo.getStatusDoJogo().equals(StatusJogo.ABERTO)) {
			situacao = "Aberto";
		} else if (jogo.getStatusDoJogo().equals(StatusJogo.FECHADO)) {
			situacao = "Fechado";
		} else if (jogo.getStatusDoJogo().equals(
				StatusJogo.FECHADO_COM_RESULTADO)) {
			situacao = "Fechado com Resultado";
		}

		return situacao;
	}
    
    private void verResultadosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_verResultadosActionPerformed
		bolaoFacade.atualisaStatusDosJogos();

		if (Sessao.getInstance().getBolao().getRodadas().size() <= 0) {
			JOptionPane.showMessageDialog(this, "Nenhuma rodada cadastrada");
			return;
		}

		List<String> rodadas = new ArrayList<String>();
		
		for (Rodada rodada : Sessao.getInstance().getBolao().getRodadas()) {
			rodadas.add("Rodada " + rodada.getIdentificador());
		}
		
		String rodadaEscolha = (String) JOptionPane.showInputDialog(null, "Escolha a rodada:", "Ver Resultados", JOptionPane.PLAIN_MESSAGE,
	        	null, rodadas.toArray(), rodadas.toArray()[0]);

		if (rodadaEscolha == null)
			return;
		
		int identificador = Integer.parseInt(rodadaEscolha.split(" ")[1]);
		
		Rodada rodada = bolaoFacade.pesquisaRodada(identificador);

		if (rodada.getJogos().size() == 0) {
			JOptionPane.showMessageDialog(this, "Esta rodada nao tem jogo.");
			return;
		}

		int pontuacao = 0;
		String str = "";
		int indice = 0;
		for (Jogo jogo : rodada.getJogos()) {
			if (jogo.getStatusDoJogo().equals(StatusJogo.FECHADO_COM_RESULTADO)) {
				indice++;
				pontuacao = bolaoFacade.calculaPontuacao(jogo.pesquisaPalpite(jogadorLogado), jogo);
				
				str += jogo.comResultado(indice, pontuacao) + "\n";
			} else if (jogo.getStatusDoJogo().equals(StatusJogo.FECHADO)) {
				indice++;
				str += jogo.semResultado(indice) + "\n";
			}
			
		}
		JOptionPane.showMessageDialog(this, str, "Ver Resultado", JOptionPane.PLAIN_MESSAGE);
    }//GEN-LAST:event_verResultadosActionPerformed

    private void verPontuacaoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_verPontuacaoActionPerformed
        bolaoFacade.atualizaPontuacao();
        
        Formatter formatter = new Formatter();

        List<String> rodadas = new ArrayList<String>();
        List<String> grupos = new ArrayList<String>();
        
        formatter.format("%1$-20s%2$s\n\n\n", "Pontos", "Jogador");
        String str = formatter.toString();
        int indice;

        Object[] options2 = {"Pontuação por Rodadas", "Pontuação Geral"};

        int resposta = JOptionPane.showOptionDialog(null, "Escolha a pontuação que deseja ver: ", "Bolão da Copa P2",
                    JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, options2, options2[0]);
        
        for (Grupo grupo : jogadorLogado.getGrupos()){
                grupos.add(grupo.getNome());
        }

        String grupoPontuacao = (String) JOptionPane.showInputDialog(null, "Escolhar o grupo que deseja ver Pontuacao:", "Pontuação por Grupo", JOptionPane.PLAIN_MESSAGE,
            null, grupos.toArray(), grupos.toArray()[0]);

        if (grupoPontuacao == null){
            return;
        }
        
        Grupo grupo = null;
        try {
			grupo = bolaoFacade.pesquisaGrupo(grupoPontuacao);
		} catch (ExceptionGrupo e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
			return;
		}
        
        if (resposta == 0){

            for (Rodada rodada : Sessao.getInstance().getBolao().getRodadas()) {
                rodadas.add("Rodada " + rodada.getIdentificador());
            }

            if (Sessao.getInstance().getBolao().getRodadas().size() == 0) {
                JOptionPane.showMessageDialog( null, "Não tem rodadas cadastradas");
                return;
            } else {
                String rodadaPontuacao = (String) JOptionPane.showInputDialog(null, "Escolha a rodada que deseja ver pontuacao", "Pontuacao", JOptionPane.PLAIN_MESSAGE,
                    null, rodadas.toArray(), rodadas.toArray()[0]);

                if (rodadaPontuacao == null)
                    return;

                int identificador = Integer.parseInt(rodadaPontuacao.split(" ")[1]);

                Rodada rodada = bolaoFacade.pesquisaRodada(identificador);

                indice = 0;
                for (Jogador jogador : grupo.getJogadores()) {
                    indice++;
                    formatter = new Formatter();
                    formatter.format("%1$4d %2$20s %3$s\n", jogador.calculaPontuacaoRodada(rodada.getIdentificador()), jogador.getNome(), "(" + jogador.getEmail() + ")");
                    str += formatter.toString();
                }
            }
        }

        if (resposta == 1) {
            indice = 0;
            for (Jogador jogador : grupo.getJogadores()) {
                indice++;
                formatter = new Formatter();
                formatter.format("%1$4d %2$20s %3$s\n", jogador.calculaPontuacaoGeral(), jogador.getNome(), "(" + jogador.getEmail() + ")");
                str += formatter.toString();
            }
        }
        
        JOptionPane.showMessageDialog(this, str, "Pontuação", -1);
    }//GEN-LAST:event_verPontuacaoActionPerformed

    private void pesquisaUsuariosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pesquisaUsuariosActionPerformed
        List<String> jogadores = new ArrayList<String>();

        String nomeUsuarioPesquisar = JOptionPane.showInputDialog(null, "Digite nome do Usuário a ser pesquisado: ");
        
        if (nomeUsuarioPesquisar == null)
        	return;
        
        for (Jogador jogador : Sessao.getInstance().getBolao().getJogadores()) {
            if (jogador.getNome().contains(nomeUsuarioPesquisar) && !jogador.getEmail().equals("root"))
			jogadores.add(jogador.getNome() + " - " + jogador.getEmail());
        }

        if (jogadores.size() == 0){
            JOptionPane.showMessageDialog(this, "Nenhum Jogador Encontrado.");
            return;
        } else {
            String usuarioPesquisar = (String) JOptionPane.showInputDialog(null, "Escolhar o amigo que deseja ver o perfil", "Pesquisa Usuário", JOptionPane.PLAIN_MESSAGE,
        	null, jogadores.toArray(), jogadores.toArray()[0]);
            
            if (usuarioPesquisar == null)
            	return;
            
            String email = usuarioPesquisar.split(" - ")[1];
            
            JOptionPane.showMessageDialog(this, bolaoFacade.pesquisaJogador(email).toString());
            return;
        }

    }//GEN-LAST:event_pesquisaUsuariosActionPerformed

    private void alteraCadastroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_alteraCadastroActionPerformed

    	String[] camposCadastro = { "Nome", "Data de Nascimento", "Naturalidade", "Senha" , "Foto"};

    	String modificaCadastro = (String) JOptionPane.showInputDialog(this, "Escolhar o campo do cadastro que deseja modificar: ", "Altera Cadastro", 
    			JOptionPane.PLAIN_MESSAGE, null, camposCadastro , camposCadastro[0]);
    	
    	if (modificaCadastro == null)
    		return;
    	
    	if (modificaCadastro.equals("Nome")) {
    		
    		JOptionPane.showMessageDialog(this, "Nome antigo: " + jogadorLogado.getNome());
    		String novoNome = JOptionPane.showInputDialog("Digite novo Nome: ");
    		
    		jogadorLogado.setNome(novoNome);
    		JOptionPane.showMessageDialog(this, "Nome modificado com Sucesso. Novo nome: " + jogadorLogado.getNome());
    		
    	} else if (modificaCadastro.equals("Data de Nascimento")){
    		
    		JOptionPane.showMessageDialog(this, "Data de Nascimento antiga: " + jogadorLogado.getData());
    		
    		new InterfaceModificaData().setVisible(true);
    		dispose();

                JOptionPane.showMessageDialog(this, "Data de Nascimento modificada com Sucesso. Nova data: " + jogadorLogado.getData());
    		
    	} else if (modificaCadastro.equals("Naturalidade")){

            JOptionPane.showMessageDialog(this, "Naturalidade antiga: " + jogadorLogado.getNaturalidade());
            String novaNaturalidade = JOptionPane.showInputDialog("Digite nova Naturalidade: ");

            jogadorLogado.setNome(novaNaturalidade);
            JOptionPane.showMessageDialog(this, "Naturalidade modificado com Sucesso. Nova naturalidade: " + jogadorLogado.getNaturalidade());
            
        } else if (modificaCadastro.equals("Foto")){
        	String novaFoto = getArquivo();
        	jogadorLogado.setFoto(novaFoto);
        	JOptionPane.showMessageDialog(this, "Foto Atualizada com Sucesso.");
        	
        } else {
            try {

                String senha = Input.password();

                if (jogadorLogado.getSenha().equals(senha)){
                    String novaSenha = Input.password("Digite nova senha");
                    Input.checaSenha(novaSenha);
                    String novaSenha2 = Input.password("Digite novamente a nova senha");
                    Input.checaSenha(novaSenha2);

                    if (novaSenha.equals(novaSenha2)){
                        jogadorLogado.setSenha(novaSenha);
                        JOptionPane.showMessageDialog(this, "Senha modificada com sucesso");
                    }
                } else {
                   JOptionPane.showMessageDialog(this, "Senha errada");
                }
            } catch (ExceptionSenha e) {
                JOptionPane.showMessageDialog(this, e.getMessage());
		return;
            }
        }
    	
    }//GEN-LAST:event_alteraCadastroActionPerformed

    @SuppressWarnings("unused")
	private void botaoAlteraCadastroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoAlteraCadastroActionPerformed
        String[] camposCadastro = { "Nome", "Data de Nascimento", "Naturalidade", "Senha" };

    	String modificaCadastro = (String) JOptionPane.showInputDialog(this, "Escolhar o campo do cadastro que deseja modificar: ", "Altera Cadastro",
    			JOptionPane.PLAIN_MESSAGE, null, camposCadastro , camposCadastro[0]);

    	if (modificaCadastro == null)
    		return;

    	if (modificaCadastro.equals("Nome")){

    		JOptionPane.showMessageDialog(this, "Nome antigo: " + jogadorLogado.getNome());
    		String novoNome = JOptionPane.showInputDialog("Digite novo Nome: ");

    		jogadorLogado.setNome(novoNome);
    		JOptionPane.showMessageDialog(this, "Nome modificado com Sucesso. Novo nome: " + jogadorLogado.getNome());

    	} else if (modificaCadastro.equals("Data de Nascimento")){

    		JOptionPane.showMessageDialog(this, "Data de Nascimento antiga: " + jogadorLogado.getData());

    		new InterfaceModificaData().setVisible(true);

    	} else if (modificaCadastro.equals("Naturalidade")){

            JOptionPane.showMessageDialog(this, "Naturalidade antiga: " + jogadorLogado.getNaturalidade());
            String novaNaturalidade = JOptionPane.showInputDialog("Digite nova Naturalidade: ");
            
            try {
				Input.checaNaturalidade(novaNaturalidade);
			} catch (ExceptionNaturalidade e) {
				JOptionPane.showMessageDialog(this, e.getMessage());
				return;
			}
            
            jogadorLogado.setNaturalidade(novaNaturalidade);
            JOptionPane.showMessageDialog(this, "Naturalidade modificado com Sucesso. Nova naturalidade: " + jogadorLogado.getNaturalidade());
        } else {
            try {

                String senha = Input.password();

                if (jogadorLogado.getSenha().equals(senha)){
                    String novaSenha = Input.password("Digite nova senha");
                    Input.checaSenha(novaSenha);
                    String novaSenha2 = Input.password("Digite novamente a nova senha");
                    Input.checaSenha(novaSenha2);

                    if (novaSenha.equals(novaSenha2)){
                        jogadorLogado.setSenha(novaSenha);
                        JOptionPane.showMessageDialog(this, "Senha modificada com sucesso");
                    }
                } else {
                   JOptionPane.showMessageDialog(this, "Senha errada");
                }
            } catch (ExceptionSenha e) {
                JOptionPane.showMessageDialog(this, e.getMessage());
                return;
            }
        }
    }//GEN-LAST:event_botaoAlteraCadastroActionPerformed
    
    /**
     * Retorna o caminho da Foto do Usuario
     * @return
     *      Caminho da Foto do Usuario
     */
    private String getArquivo() {
        String caminho = "";

        try {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode( JFileChooser.FILES_ONLY );
            int result = fileChooser.showOpenDialog( this );

            if (result == JFileChooser.CANCEL_OPTION)
            	return "generic_avatar.png";

            File fileName = fileChooser.getSelectedFile();
            caminho = fileName.getAbsolutePath();
            if ( ( fileName == null ) || ( fileName.getName().equals ( "" ) ) ) {
               	JOptionPane.showMessageDialog ( null, "Nome do arquivo invalido", "Nome do arquivo invalido", JOptionPane.ERROR_MESSAGE);
               	return "generic_avatar.png";
            }

            bolaoFacade.atualizaDados();
		} catch (Exception e) {
	            JOptionPane.showMessageDialog (this, "Arquivo invalido.");
		}

       return caminho;
       }
    
    

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new InterfaceUsuario().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton alteraCadastro;
    private javax.swing.JButton botaoAlteraCadastro;
    private javax.swing.JButton configuraGrupos;
    private javax.swing.JButton darPalpites;
    private javax.swing.JButton deslogar;
    private javax.swing.JLabel labelFoto;
    private javax.swing.JLabel labelNome;
    private javax.swing.JLabel labelPontuacao;
    private javax.swing.JLabel nomeUsuario;
    private javax.swing.JButton pesquisaUsuarios;
    private javax.swing.JLabel pontuacaoUsuario;
    private javax.swing.JButton verPontuacao;
    private javax.swing.JButton verResultados;
    // End of variables declaration//GEN-END:variables
}
